package w11;

import java.util.Arrays;
import java.util.Comparator;

public class PersonArrayDemo {
//	2、给数组元素赋值
	static void init(Person[] ps) {
		ps[0] = new Person("张三", 1.7, 50);
		ps[1] = new Person("李四", 1.6, 48);
		ps[2] = new Person("王五", 1.8, 70);
	}
	
//	3、遍历数组元素（从0开始访问数组的每个元素），并输出Person的姓名
	static void printName(Person[] ps) {
		for (Person p : ps) {
			System.out.print(p.name + ", ");
		}
		System.out.println();
	}
//	4、求数组的身高和
	static double sumHeight(Person[] ps) {
		double sum = 0;
		for (int i=0; i<ps.length; i++) {
			Person p = ps[i];
			sum += p.height;
		}
		return sum;
	}
//	5、找出数组中身高最高的人
	static Person findByHeightMax(Person[] ps) {
		Person max = new Person("temp", Double.MIN_VALUE, 0);
		for (Person p : ps) {
			if (p.height > max.height) {
				max = p;
			}
		}
		return max;
	}
//	6、在数组中按姓名查找，找到返回元素，没找到返回null
	static Person findByName(Person[] ps, String name) {
		for (Person p : ps) {
			if (name.equals(p.name)) {
				return p;
			}
		}
		return null;
	}
//	7、使用Arrays.sort 方法按身高排序数组元素
	static void sortByHeight(Person[] ps) {
		// 为sort方法提供一个比较器，比较两人的身高
		// 比较器必须实现Comparator接口，这里使用了匿名内部类
		Arrays.sort(ps, new Comparator<Person>() {
			@Override
			public int compare(Person p1, Person p2) {
				if (p1.height > p2.height) {
					return 1;
				}
				if (p1.height < p2.height) {
					return -1;
				}
				return 0;
			}
		});
	}
	
//	7、使用Arrays.sort 方法按身高排序数组元素
	static void sortByHeight2(Person[] ps) {
		// 为sort方法提供一个比较器，比较两人的身高
		// 比较器必须实现Comparator接口，这里使用了内部类
		PersonComparator comparator = new PersonComparator();
		Arrays.sort(ps, comparator);
	}
	
//	7、使用Arrays.sort 方法按身高排序数组元素
	static void sortByHeight3(Person[] ps) {
		// 为sort方法提供一个比较器，比较两人的身高
		// 比较器必须实现Comparator接口，这里使用了内部类
		Arrays.sort(ps, new PersonComparator());
	}
	
	// 内部类
	static class PersonComparator implements Comparator<Person> {
		@Override
		public int compare(Person p1, Person p2) {
			if (p1.height > p2.height) {
				return 1;
			}
			if (p1.height < p2.height) {
				return -1;
			}
			return 0;
		}
	}

	public static void main(String[] args) {
//		1、定义并创建3个元素的Person型数组
		Person[] persons = new Person[3];
//		2、给数组元素赋值
		init(persons);
		
//		3、遍历数组元素（从0开始访问数组的每个元素），并输出Person的姓名
		printName(persons);
		
//		4、求数组的身高和
		double sum = sumHeight(persons);
		
//		5、找出数组中人
		Person maxHeight = findByHeightMax(persons);
		System.out.println("身高最高的是: " + maxHeight.name + ", 身高: " + maxHeight.height);
		
//		6、在数组中按姓名查找，找到返回元素，没找到返回null
		Person zs = findByName(persons, "张三");
		System.out.println( "张三查找结果：" + zs);
		
		Person zl = findByName(persons, "赵六");
		System.out.println( "赵六查找结果：" + zl);
		
//		7、使用Arrays.sort 方法按身高排序数组元素
		sortByHeight(persons);
		printName(persons);
	}

}
